机器学习中,如果参数过多,模型过于复杂,容易造成过拟合(overfitting):即模型在训练样本数据上表现的很好,但在实际测试样本上表现的较差,不具备良好的泛化能力。

为了避免过拟合,最常用的一种方法是使用正则化,例如 L1 和 L2 正则化。但是,正则化项是如何得来的?其背后的数学原理是什么?L1 正则化和 L2 正则化之间有何区别?除此之外,还有哪些方法来解决过拟合问题?

本文将对这些问题给出直观的解释。

0x00 过拟合问题

虽然很简单,但我们还是先来回顾一下过拟合问题,以线性回归中的房价预测为例:

image-20210501161346760
  • 左边第一幅图是一个线性模型,并没有很好的拟合训练数据,我们把此类情况称为欠拟合(underfitting)**,或者叫作叫做高偏差(bias)**。

  • 中间第二幅图,我们在中间加入一个二次项,也就是说对于这幅数据我们用二次函数去拟合,事实也证明这个拟合效果很好,我们称之为 just right。

  • 右边第三幅图则是一个更加极端的情况,我们使用一个四次多项式来拟合。通过我们的五个训练样本,我们可以得到如右图的一条曲线。

    • 一方面,我们似乎对训练数据做了一个很好的拟合,因为这条曲线通过了所有的训练实例。但是,这实际上是一条很扭曲的曲线,它不停上下波动。因此,事实上我们并不认为它是一个预测房价的好模型。
    • 所以,我们把这类情况叫做过拟合(overfitting)**,也叫高方差(variance)**。

过拟合问题通常发生在变量(特征)过多没有足够的数据集(训练集)去约束这个模型的时候。这种情况下训练出的方程总是能很好的拟合训练数据,也就是说,我们的代价函数在训练集上可能非常接近于 0,甚至就为0。

但是,这样的曲线千方百计的去拟合训练数据,可能会导致它无法泛化到新的数据样本中,即无法预测新样本价格。

这就是过拟合问题,下面这个图可能更加有趣一些:

image-20210501155541011

0x01 加入正则项

为了防止过拟合,可以对模型添加正则化项来限制模型的复杂度,使得模型在复杂度和性能之间达到平衡。

考虑前面的房价预测的例子,我们的优化目标是最小化代价函数 $J(\theta)$:

$$J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_{\theta} (x^{(i)}) - y^{(i)})^2 $$

如果我们在代价函数中加入两个惩罚项来对高阶参数 $\theta_3$ 和 $\theta_4$ 进行惩罚:

$$J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_{\theta} (x^{(i)}) - y^{(i)})^2 + \lambda |\theta_3|^2 + \lambda |\theta_4|^2 $$

当 $\lambda$ 取得很大时,比如1000,那新的代价函数将会变得非常大。

所以当我们在最小化这个新的代价函数时, 我们将使 $\theta_3$ 和 $\theta_4$ 这两个参数的值都接近于 0,那么我们将得到一个近似的二次函数,如下图。

image-20210501162816848

通过加入正则项的方法,我们最终恰当地拟合了训练数据,且很好地控制了模型的复杂度。

这就是正则化背后的核心思路,即

如果我们的参数值越小,通常对应于越光滑的函数,也就是更加简单的函数,因此就不易发生过拟合的问题。

但还有一个问题是,如果考虑更一般的情况,比如当我们有一百个特征时,我们并不知道该如何选择关联度更好的参数,如何缩小参数的数目等等。因此在正则化中,我们就需要对所有的参数值进行约束:

$$J(\theta) = \frac{1}{2m} [\ \sum_{i=1}^m (h_{\theta} (x^{(i)}) - y^{(i)})^2 + \lambda \sum_{j=1}^n |\theta_j|^2 \ ]$$

其中,$\lambda \sum_{j=1}^n |\theta_j|^2 $ 就是正则项,$\lambda$ 被称为正则化参数

0x02 L1、L2 正则化

前面已经介绍了加入正则项的作用与原理,L1和L2正则化的不同仅在于使用的正则项不同,使用L1正则化的模型叫做Lasso回归(拉索回归),使用L2正则化的模型叫做Ridge回归(岭回归),下面我们一一介绍。

1. L1、L2 正则化的原理

L2 正则化公式非常简单,实际上我们前面就是以 L2 为例介绍的,即直接在原来的损失函数基础上加上权重参数的平方和:

$$J = J_0 + \lambda \sum_j |w_j|^2 $$

L1 正则化则是参数的绝对值之和:

$$J = J_0 + \lambda \sum_j |w_j| $$

2. L1、L2 正则化的直观解释

那怎么去理解呢?我们知道,正则化的目的是为了对模型进行约束,避免模型更加复杂。为了达到这一目的,最直观的方法就是限制参数 $w$ 的个数,但是这类条件属于 NP-hard 问题,求解非常困难。所以,一般的做法是寻找更宽松的限定条件:

$$\sum_j |w_j|^2 \leq C$$

即对参数 $w$ 做数值上的限定,使 正则项之和不超过常数 $C$ ** ,从而避免参数过大**。

这样,我们的目标就变成了在不等式条件约束下的最优化问题

为了更形象化的说明,我们假设待优化目标在二维空间进行,即只有两个参数 $w_1$ 和 $w_2$ 。

那么 L2 正则化对解空间的约束为:

$$w_1^2 + w_1^2 \leq C$$

L1 正则化对解空间的约束为:

$$|w_1| + |w_2| \leq C$$

在二维空间中绘制两个式子的图像,可知L2约束的范围是一个圆形,L1约束的范围是一个菱形,且顶点在坐标轴上。

image-20210501175221821

上图中,左边是L2约束下解空间的图像,右边是L1约束下解空间的图像,蓝色的圆圈表示损失函数的等值线。同一个圆上的损失函数值相等的,圆的半径越大表示损失值越大,由外到内,损失函数值越来越小,中间最小。

我们发现,如果没有L1和L2正则化约束的话,$w_1$ 和 $w_2$ 是可以任意取值的,即损失函数可以优化到中心的最小值的,此时中心对应的 $w_1$ 和 $ w_2$ 的取值就是模型最终求得的参数。

但是加入了L1和L2正则化约束就把解空间约束在了黄色的平面内。黄色图像的边缘与损失函数等值线的交点,便是同时满足约束条件且能够使损失函数最小化的参数的解

3. 正则化参数 $\lambda$

正则项中的参数 $\lambda$ 实际上起到了权衡的作用。

以 L2 为例,若 $\lambda$ 很小,对应上文中的 C 值就会很大。这时候,圆形区域就很大,因而能够让 $w$ 更加接近最优解的位置(损失函数等值线的中心点)。但如果 $\lambda$ 近似为 0,圆形区域就会覆盖最优解的位置,这时候,正则化失效,便容易造成过拟合。

image-20210501181617569

相反,如果 $\lambda$ 很大,那对应的 C 值就很小。这时候,圆形区域很小,$w$ 距离最优解的位置较远,被限制在一个很小的区域内变化,$w$ 普遍较小且接近 0。虽然起到了正则化的效果,但却容易造成欠拟合。

4. L1、L2 正则化的特点

L2正则化可以直观理解为它会对于大数值的权重向量进行严厉惩罚,因而倾向于更加数值更小更加分散的权重向量。这样就有了一个优良的特性:使网络更倾向于使用所有输入特征,而不是严重依赖输入特征中某些小部分特征。 这样做可以提高模型的泛化能力,降低过拟合的风险。

在实践中,如果不是特别关注某些明确的特征选择,一般说来L2正则化都会比L1正则化效果好。

但L1正则化有一个有趣的性质,它会让权重向量在最优化的过程中变得稀疏(即非常接近0)。也就是说,使用L1正则化的神经元最后得到的是输入数据中最重要的稀疏子集,因而可以用于特征选择

这是由于,L1正则化约束的解空间是一个菱形,因而等值线与菱形端点相交的概率比与线的中间相交的概率要大很多,而端点在坐标轴上,即会有一部分参数取值为0。因而L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型

而L2正则化约束的解空间是圆形,所以等值线与圆的任何部分相交的概率都是一样的,所以也就不会产生稀疏的参数。

0x03 Dropout 正则化

1. Dropout 原理

Dropout说的简单一点就是:在前向传播的过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃(随机失活),这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征,如下图所示:

image-20210501182040480

注意 dropout 是对某一个隐藏层而言的,如上图就是对三个隐藏层用了三次dropout。

2. 为什么Dropout可以解决过拟合?

(1)取平均的作用

dropout掉不同的隐藏神经元就类似在训练不同的网络,随机删掉一半隐藏神经元导致网络结构已经不同,整个dropout过程就相当于对很多个不同的神经网络取平均。

(2)减少神经元之间复杂的共适应关系

因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况 。迫使网络去学习更加鲁棒的特征 ,这些特征在其它的神经元的随机子集中也存在。

换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的特征

0x04 参考文章

[1] 机器学习之正则化(Regularization)

[2] 正则化的作用以及L1和L2正则化的区别

[3] 机器学习中正则化项L1和L2的直观理解

[4] 过拟合以及解决办法

[5] 【通俗易懂】机器学习中 L1 和 L2 正则化的直观解释

[6] 深度学习中Dropout原理解析